#http://martyalchin.com/2007/nov/22/dynamic-functions/

#asterisk:

#*p

# In Python-speak, positional arguments are any arguments that aren’t named
# when you call a function. That is, which variable they go to in the function
# is defined by their position — first, second, third — instead of their names.
# This is how most languages work, and is intuitive to most programmers, regardless of their backgrounds. 

#**p

# Python also supports keyword arguments. Function definitions are the same, but you can call a function
# and identify arguments by name instead of by position.

class Kls(object):
    def __init__(self, data):
        self.data = data
 
    def printd(self):
        print(self.data)
 
    #A static method does not receive an implicit first argument.
    @staticmethod
    def smethod():
        print('Static:')
 
    #A class method receives the class as implicit first argument,just like an instance method receives the instance.
    @classmethod
    def cmethod(*arg):
        print('Class:', arg)
        
ik = Kls(23)
ik.printd()

ik.smethod()
ik.cmethod()
#not works of printnd is not class method
#Kls.printd()
Kls.smethod()
Kls.cmethod()
